{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using forecaster models in production\n",
    "\n",
    "\n",
    "When using a trained **model in production**, regular predictions need to be generated, for example, on a weekly basis every Monday. By default, the `predict` method on a trained forecaster object generates predictions starting right after the last training observation. Therefore, the model could be retrained weekly, just before the first prediction is needed, and its predict method called. However, this approach may not be practical due to reasons such as: expensive model training, unavailability of the training data history, or high prediction frequency.\n",
    "\n",
    "In such scenarios, the **model must be able to predict at any time**, even if it has not been recently trained. Fortunately, every model generated using skforecast has the `last_window` argument in its `predict` method. This argument allows providing only the past values needed to create the autoregressive predictors (lags or custom predictors), enabling prediction without the need to retrain the model. This feature is particularly useful when there are limitations in retraining the model regularly or when dealing with high-frequency predictions."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"admonition note\" name=\"html-admonition\" style=\"background: rgba(0,191,191,.1); padding-top: 0px; padding-bottom: 6px; border-radius: 8px; border-left: 8px solid #00bfa5; border-color: #00bfa5; padding-left: 10px; padding-right: 10px;\">\n",
    "\n",
    "<p class=\"title\">\n",
    "    <i style=\"font-size: 18px; color:#00bfa5;\"></i>\n",
    "    <b style=\"color: #00bfa5;\">&#128161 Tip</b>\n",
    "</p>\n",
    "\n",
    "When deploying a <b>forecaster in production</b>, it is good practice to <a href=\"../user_guides/drift-detection.html\">pair it with a drift detector</a>. This ensures that both are trained on the **same dataset**, allowing the drift detector to verify the **input data** before the forecaster makes predictions.\n",
    "\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Libraries and data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Libraries\n",
    "# ==============================================================================\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from skforecast.datasets import fetch_dataset\n",
    "from skforecast.recursive import ForecasterRecursive\n",
    "from skforecast.utils import save_forecaster\n",
    "from skforecast.utils import load_forecaster\n",
    "from skforecast.plot import set_dark_theme"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">╭────────────────────────────────────── <span style=\"font-weight: bold\">h2o</span> ───────────────────────────────────────╮\n",
       "│ <span style=\"font-weight: bold\">Description:</span>                                                                     │\n",
       "│ Monthly expenditure ($AUD) on corticosteroid drugs that the Australian health    │\n",
       "│ system had between 1991 and 2008.                                                │\n",
       "│                                                                                  │\n",
       "│ <span style=\"font-weight: bold\">Source:</span>                                                                          │\n",
       "│ Hyndman R (2023). fpp3: Data for Forecasting: Principles and Practice(3rd        │\n",
       "│ Edition). http://pkg.robjhyndman.com/fpp3package/,https://github.com/robjhyndman │\n",
       "│ /fpp3package, http://OTexts.com/fpp3.                                            │\n",
       "│                                                                                  │\n",
       "│ <span style=\"font-weight: bold\">URL:</span>                                                                             │\n",
       "│ https://raw.githubusercontent.com/skforecast/skforecast-                         │\n",
       "│ datasets/main/data/h2o.csv                                                       │\n",
       "│                                                                                  │\n",
       "│ <span style=\"font-weight: bold\">Shape:</span> 204 rows x 2 columns                                                      │\n",
       "╰──────────────────────────────────────────────────────────────────────────────────╯\n",
       "</pre>\n"
      ],
      "text/plain": [
       "╭────────────────────────────────────── \u001b[1mh2o\u001b[0m ───────────────────────────────────────╮\n",
       "│ \u001b[1mDescription:\u001b[0m                                                                     │\n",
       "│ Monthly expenditure ($AUD) on corticosteroid drugs that the Australian health    │\n",
       "│ system had between 1991 and 2008.                                                │\n",
       "│                                                                                  │\n",
       "│ \u001b[1mSource:\u001b[0m                                                                          │\n",
       "│ Hyndman R (2023). fpp3: Data for Forecasting: Principles and Practice(3rd        │\n",
       "│ Edition). http://pkg.robjhyndman.com/fpp3package/,https://github.com/robjhyndman │\n",
       "│ /fpp3package, http://OTexts.com/fpp3.                                            │\n",
       "│                                                                                  │\n",
       "│ \u001b[1mURL:\u001b[0m                                                                             │\n",
       "│ https://raw.githubusercontent.com/skforecast/skforecast-                         │\n",
       "│ datasets/main/data/h2o.csv                                                       │\n",
       "│                                                                                  │\n",
       "│ \u001b[1mShape:\u001b[0m 204 rows x 2 columns                                                      │\n",
       "╰──────────────────────────────────────────────────────────────────────────────────╯\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Download data\n",
    "# ==============================================================================\n",
    "data = fetch_dataset(\n",
    "    name=\"h2o\", raw=True, kwargs_read_csv={\"names\": [\"y\", \"date\"], \"header\": 0}\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2004-09-01</th>\n",
       "      <td>1.134432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-10-01</th>\n",
       "      <td>1.181011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-11-01</th>\n",
       "      <td>1.216037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004-12-01</th>\n",
       "      <td>1.257238</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-01-01</th>\n",
       "      <td>1.170690</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   y\n",
       "date                \n",
       "2004-09-01  1.134432\n",
       "2004-10-01  1.181011\n",
       "2004-11-01  1.216037\n",
       "2004-12-01  1.257238\n",
       "2005-01-01  1.170690"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Data preprocessing\n",
    "# ==============================================================================\n",
    "data['date'] = pd.to_datetime(data['date'], format='%Y-%m-%d')\n",
    "data = data.set_index('date')\n",
    "data = data.asfreq('MS')\n",
    "data_train = data.loc[:'2005-01-01']\n",
    "data_train.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Data preprocessing\n",
    "# ==============================================================================\n",
    "data_train = data.loc[:'2005-01-01']\n",
    "# data_train"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Predicting with last window"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Train forecaster\n",
    "# ==============================================================================\n",
    "forecaster = ForecasterRecursive(\n",
    "                 estimator     = RandomForestRegressor(random_state=123),\n",
    "                 lags          = 5,\n",
    "                 forecaster_id = 'forecasting_series_y'\n",
    "             )\n",
    "\n",
    "forecaster.fit(y=data_train['y'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2005-02-01    0.927480\n",
       "2005-03-01    0.756215\n",
       "2005-04-01    0.692595\n",
       "Freq: MS, Name: pred, dtype: float64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Predict\n",
    "# ==============================================================================\n",
    "forecaster.predict(steps=3)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As expected, predictions follow directly from the end of training data.\n",
    "\n",
    "When the `last_window` argument is provided, the forecaster uses this data to generate the necessary lags as predictors and starts the prediction thereafter."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2008-07-01    0.803853\n",
       "2008-08-01    0.870858\n",
       "2008-09-01    0.905003\n",
       "Freq: MS, Name: pred, dtype: float64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Predict with last_window\n",
    "# ==============================================================================\n",
    "last_window = data['y'].tail(5)\n",
    "forecaster.predict(steps=3, last_window=last_window)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since the provided `last_window` contains values from 2008-02-01 to 2008-06-01, the forecaster can create the needed lags and predict the next 5 steps."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"admonition note\" name=\"html-admonition\" style=\"background: rgba(255,145,0,.1); padding-top: 0px; padding-bottom: 6px; border-radius: 8px; border-left: 8px solid #ff9100; border-color: #ff9100; padding-left: 10px; padding-right: 10px\">\n",
    "\n",
    "<p class=\"title\">\n",
    "    <i style=\"font-size: 18px; color:#ff9100; border-color: #ff1744;\"></i>\n",
    "    <b style=\"color: #ff9100;\"> <span style=\"color: #ff9100;\">&#9888;</span> Warning</b>\n",
    "</p>\n",
    "\n",
    "When using the `last_window` argument, it is crucial to ensure that the length of `last_window` is sufficient to include the maximum lag (or custom predictor) used by the forecaster. For instance, if the forecaster employs lags 1, 24, and 48, `last_window` must include the most recent 48 values of the series. Failing to include the required number of past observations may result in an error or incorrect predictions.\n",
    "\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Real Use Case\n",
    "\n",
    "The main advantage of using the `last_window` argument is that it can be used to predict at any time, even if the Forecaster has not been trained recently.\n",
    "\n",
    "Imagine a use case where a model is trained, stored, and **1 year later** the company wants to use it to make some predictions."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Data\n",
    "\n",
    "A gap is created between the end of the training data and the last window data to simulate this behavior."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train dates       : 1991-07-01 00:00:00 --- 2005-01-01 00:00:00  (n=163)\n",
      "Last window dates : 2005-08-01 00:00:00 --- 2005-12-01 00:00:00  (n=5)\n"
     ]
    }
   ],
   "source": [
    "# Split data\n",
    "# ==============================================================================\n",
    "data_train = data.loc[:'2005-01-01'].copy()\n",
    "data_last_window = data.loc['2005-08-01':'2005-12-01'].copy()\n",
    "\n",
    "print(\n",
    "    f\"Train dates       : {data_train.index.min()} --- {data_train.index.max()}\"\n",
    "    f\"  (n={len(data_train)})\"\n",
    ")\n",
    "print(\n",
    "    f\"Last window dates : {data_last_window.index.min()} --- {data_last_window.index.max()}\"\n",
    "    f\"  (n={len(last_window)})\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot time series partition\n",
    "# ==============================================================================\n",
    "set_dark_theme()\n",
    "fig, ax = plt.subplots(figsize=(7, 3))\n",
    "data_train['y'].plot(label='train', ax=ax)\n",
    "data_last_window['y'].plot(label='last window', ax=ax)\n",
    "ax.set_xlabel('')\n",
    "ax.legend();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Forecaster initial train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Train forecaster\n",
    "# ==============================================================================\n",
    "forecaster = ForecasterRecursive(\n",
    "                 estimator     = RandomForestRegressor(random_state=123),\n",
    "                 lags          = 5,\n",
    "                 forecaster_id = 'forecasting_series_y'\n",
    "             )\n",
    "\n",
    "forecaster.fit(y=data_train['y'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The size of the window needed to make predictions and the last window stored in the forecaster to make predictions **immediately after the training data** can be observed with the `window_size` and `last_window` attributes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Window size: 5\n",
      "Forecaster last window:\n",
      "                   y\n",
      "date                \n",
      "2004-09-01  1.134432\n",
      "2004-10-01  1.181011\n",
      "2004-11-01  1.216037\n",
      "2004-12-01  1.257238\n",
      "2005-01-01  1.170690\n"
     ]
    }
   ],
   "source": [
    "# Forecaster Attributes\n",
    "# ==============================================================================\n",
    "print('Window size:', forecaster.window_size)\n",
    "print(\"Forecaster last window:\")\n",
    "print(forecaster.last_window_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The model is saved for future use."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"admonition note\" name=\"html-admonition\" style=\"background: rgba(0,184,212,.1); padding-top: 0px; padding-bottom: 6px; border-radius: 8px; border-left: 8px solid #00b8d4; border-color: #00b8d4; padding-left: 10px; padding-right: 10px;\">\n",
    "\n",
    "<p class=\"title\">\n",
    "    <i style=\"font-size: 18px; color:#00b8d4;\"></i>\n",
    "    <b style=\"color: #00b8d4;\">&#9998 Note</b>\n",
    "</p>\n",
    "\n",
    "Learn more about how to <a href=\"../user_guides/save-load-forecaster.html\">Save and load forecasters</a>.\n",
    "\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Save Forecaster\n",
    "# ==============================================================================\n",
    "save_forecaster(forecaster, file_name='forecaster_001.joblib', verbose=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Future predictions\n",
    "\n",
    "The model is loaded to make new predictions. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"admonition note\" name=\"html-admonition\" style=\"background: rgba(0,191,191,.1); padding-top: 0px; padding-bottom: 6px; border-radius: 8px; border-left: 8px solid #00bfa5; border-color: #00bfa5; padding-left: 10px; padding-right: 10px;\">\n",
    "\n",
    "<p class=\"title\">\n",
    "    <i style=\"font-size: 18px; color:#00bfa5;\"></i>\n",
    "    <b style=\"color: #00bfa5;\">&#128161 Tip</b>\n",
    "</p>\n",
    "\n",
    "Since the Forecaster has already been trained, there is <b>no need to re-fit the model</b>.\n",
    "\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=================== \n",
      "ForecasterRecursive \n",
      "=================== \n",
      "Estimator: RandomForestRegressor \n",
      "Lags: [1 2 3 4 5] \n",
      "Window features: None \n",
      "Window size: 5 \n",
      "Series name: y \n",
      "Exogenous included: False \n",
      "Exogenous names: None \n",
      "Transformer for y: None \n",
      "Transformer for exog: None \n",
      "Weight function included: False \n",
      "Differentiation order: None \n",
      "Training range: [Timestamp('1991-07-01 00:00:00'), Timestamp('2005-01-01 00:00:00')] \n",
      "Training index type: DatetimeIndex \n",
      "Training index frequency: <MonthBegin> \n",
      "Estimator parameters: \n",
      "    {'bootstrap': True, 'ccp_alpha': 0.0, 'criterion': 'squared_error', 'max_depth':\n",
      "    None, 'max_features': 1.0, 'max_leaf_nodes': None, 'max_samples': None,\n",
      "    'min_impurity_decrease': 0.0, 'min_samples_leaf': 1, 'min_samples_split': 2,\n",
      "    'min_weight_fraction_leaf': 0.0, 'monotonic_cst': None, 'n_estimators': 100,\n",
      "    'n_jobs': None, 'oob_score': False, 'random_state': 123, 'verbose': 0,\n",
      "    'warm_start': False} \n",
      "fit_kwargs: {} \n",
      "Creation date: 2025-11-26 15:04:05 \n",
      "Last fit date: 2025-11-26 15:04:05 \n",
      "Skforecast version: 0.19.0 \n",
      "Python version: 3.12.11 \n",
      "Forecaster id: forecasting_series_y \n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Load Forecaster\n",
    "# ==============================================================================\n",
    "forecaster_loaded = load_forecaster('forecaster_001.joblib', verbose=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The forecaster's training range ends at '2005-01-01'. Using a `last_window`, the forecaster will be able to make predictions for '2006-01-01', 1 year later, without having to re-fit the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2005-08-01</th>\n",
       "      <td>1.006497</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-09-01</th>\n",
       "      <td>1.094736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-10-01</th>\n",
       "      <td>1.027043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-11-01</th>\n",
       "      <td>1.149232</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005-12-01</th>\n",
       "      <td>1.160712</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   y\n",
       "date                \n",
       "2005-08-01  1.006497\n",
       "2005-09-01  1.094736\n",
       "2005-10-01  1.027043\n",
       "2005-11-01  1.149232\n",
       "2005-12-01  1.160712"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 1 year later last window\n",
    "# ==============================================================================\n",
    "data_last_window"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2006-01-01    0.979303\n",
       "2006-02-01    0.760421\n",
       "2006-03-01    0.634806\n",
       "Freq: MS, Name: pred, dtype: float64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Predict with last_window\n",
    "# ==============================================================================\n",
    "forecaster.predict(steps=3, last_window=data_last_window['y'])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "skforecast_py12",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.11"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Tabla de contenidos",
   "title_sidebar": "Tabla de contenidos",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "165px"
   },
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "position": {
    "height": "144.391px",
    "left": "1478px",
    "right": "20px",
    "top": "126px",
    "width": "350px"
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
